import {
	login,
	getUserInfo
} from '@/api/user'
import {
	TokenKey
} from '@/config/index.js'
export default {
	namespaced: true,
	state: {
		iap: {}, ////保存应用内支付对象
		goods:{}
	},
	getters: {

	},
	mutations: {
		SETIAP(state, data) {
			state.iap = data
		},
		SETGOODS(state, data){
			state.goods = data
		}
	},
	actions: {
		/**
		 * 应用内支付通道标识为appleiap，调用plus.payment.getChannels获取应用内支付对象：
		 */
		getChannels({
			commit,
			state,
			dispatch
		},productid = 'testid') {
			var iap = null; //保存应用内支付对象
			commit('SETGOODS',)
			uni.showLoading({
				title:"加载中"
			})
			return new Promise((reslove, reject) => {
				plus.payment.getChannels(function(channels) {
					for (var i in channels) {
						var channel = channels[i];
						// 获取 id 为 'appleiap' 的 channel  
						if (channel.id === 'appleiap') {
							commit('SETIAP', channel)
							dispatch('requestOrder',productid).then( res => {
								reslove(res)
							}).catch( err => {
								reject(err)
							})
						}
					}
				}, function(e) {
					uni.hideLoading()
					console.log("获取iap支付通道失败：" + e.message);
				});
			})
		},
		/** 
		 * 获取商品信息
		 */
		requestOrder({state,dispatch},productid) {
			return new Promise((reslove, reject) => {
				// ids 数组中的项为 App Store Connect 配置的内购买项目产品ID（productId）
				var ids = ['testid','yiyuanchongzhi1',"liuyuanchongzhi6",'shibayuan18'];
				// iap 为应用内支付对象 
				state.iap.requestOrder(ids, function(e) {
					// 获取订单信息成功回调方法  
					// console.log('requestOrder success: ' + JSON.stringify(e));
					dispatch('paymentRequest',productid).then( res => {
						reslove(res)
					}).catch( err => {
						reject(err)
					})
				}, function(e) {
					uni.hideLoading()
					// 获取订单信息失败回调方法  
					// console.log('requestOrder failed: ' + JSON.stringify(e));
				});
			})
		},
		paymentRequest({state,dispatch},productid){
			console.log(productid,'productid')
			return new Promise((reslove, reject) => {
				// restoreFlag 标记，用于判断在页面显示的时候是否需要调用 restoreComplateRequest 方法
				var restoreFlag = true; // 调用支付接口时标记 restoreFlag = true , 实际应用请将标记存储在 storage 中  
				plus.payment.request(state.iap, {
				    productid: productid,
				    // username: "appusername", // 用户标识  
				    manualFinishTransaction: true, // 3.5.1+ 支持，设置此参数后需要开发者主动关闭订单，参见下面的关闭订单方法 finishTransaction()
				  }, function(result){
					uni.hideLoading()
				    restoreFlag = false; // 支付成功清除标记 restoreFlag = false  
					console.log('苹果支付成功');
					dispatch('finishTransaction',result)
					reslove(result)
				    // 支付成功，result 为 IAP商品交易信息对象 IAPTransaction 需将返回的支付凭证传给后端进行二次认证  
				  }, function(e){
					   uni.showModal({
					  	title:'提示',
					  	content:'支付失败',
						showCancel:false,
						confirmText:'好的',
						confirmColor:"#E3A117"
					  })
					  uni.hideLoading()
					  reject(e)
					// 支付失败 返回错误信息
					console.log(e,'支付失败');
				});
			})
		},
		finishTransaction({state},transaction) {
		  // IAP商品交易信息对象 IAPTransaction
		    state.iap.finishTransaction(transaction, (success) => {
		      console.log('关闭订单成功');
		    }, (fail) => {
		      console.log('关闭订单失败');
		    });
		}
	}
}